/*
 *  align3p.h
 *  EPPI-0.0
 *
 *  Created by Juan Carlos Garcia Orden on 06/08/2012
 *
 */

#ifndef _align3p_h_
#define _align3p_h_

#include "constraint.h"
#include "commonutil.h"


using namespace std;

class Align3P : public Constraint
{
public:
	// ...
	
public:
	Align3P();
	Align3P(vector<string>&, int);
	~Align3P(){}

	// Virtual functions from base	
	void calcPhi(const VectorXd &);
	void calcDPhi(const VectorXd &);
	void calcDDPhi(const VectorXd &);
	void setFqSymmetries();
	void setKqSymmetries();
	void setParamAtCons(vector<double> &);
	
	/** Local functions */
//	void calcPhii(VectorXd &);
	
	/** Friend functions */
	friend double lTwoNorm(const vector<double>& v1);
	friend double lTwoNorm(const vector<double>& v1, const vector<double>& v2);
	friend void uVersor(const vector<double>& v1, const double & dis, const int& dim, vector<double>& u);
	friend void printSTLVector(vector<double>& v);
	friend void printSTLMatrix(const vector< vector<double> >& m);


};

#endif

